package br.com.sisgerenciamento.dto.usuario;

import java.io.Serializable;
import java.security.NoSuchAlgorithmException;

import br.com.sisgerenciamento.exceptions.ApplicationException;
import br.com.sisgerenciamento.model.usuario.TipoUsuarioEnum;
import br.com.sisgerenciamento.model.usuario.UsuarioVO;
import br.com.sisgerenciamento.utilidades.TreatCriptografia;
import br.com.sisgerenciamento.utilidades.TreatString;
import br.com.sisgerenciamento.utilidades.Validator;

public class UsuarioDTO implements Serializable{


	private static final long serialVersionUID = 1L;
	
	private String codigo;
	private String nome;
	private String login;
	private String senha;
	private Integer tipo;
	private String status;
	
	private String descricaoTipo;
	
	public UsuarioVO getVO() throws NoSuchAlgorithmException{
		UsuarioVO vo = new UsuarioVO();
		
		Validator validator = Validator.novo();
		vo.setCodigo(!validator.isNullOrZero(getCodigo()) ? new Long(getCodigo()) : null );
		vo.setNome(getNome());
		vo.setStatus(TreatString.isNotBlank(getStatus())&& "true".equals(getStatus()) ? true : false);
		vo.setTipo(TipoUsuarioEnum.getByValor(getTipo()));
		vo.setLogin(getLogin());
		if(TreatString.isNotBlank(getSenha()) && getSenha().length() <= 10){
			vo.setSenha(TreatCriptografia.encrypt(getSenha()));
		}else{
			vo.setSenha(getSenha());
		}
		
		return vo;
	}
	
	public void validar() throws ApplicationException{
		Validator validator = Validator.novo();
		validator.obrigatorio(getNome(), getLogin(), getSenha(), getTipo(), getStatus());
	}
	
	public String getCodigo() {
		return codigo;
	}
	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getLogin() {
		return login;
	}
	public void setLogin(String login) {
		this.login = login;
	}
	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}
	public Integer getTipo() {
		return tipo;
	}
	public void setTipo(Integer tipo) {
		this.tipo = tipo;
	}
	public String getStatus() {
		return status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
	public String getDescricaoTipo() {
		return descricaoTipo;
	}
	public void setDescricaoTipo(String descricaoTipo) {
		this.descricaoTipo = descricaoTipo;
	}
	
	
	
}
